//
// Ishtar C++ Utility Library
//
// Task Facility - Work Strand Header
//

#ifndef __ISHTAR_TASK_WORK_STRAND_H
#define __ISHTAR_TASK_WORK_STRAND_H

#include <Ishtar/Ishtar.h>

#if defined( ISHTAR_COMPILER_HAS_PRAGMA_ONCE )
#pragma once
#endif

#include <boost/noncopyable.hpp>
#include <Ishtar/ReferenceCounted.h>
#include <Ishtar/Task/TaskFwd.h>


namespace Ishtar
{

namespace Task
{

///////////////////////////////////////////////////////////////////////////////
//
// Work Strand
//

class WorkStrandImpl;

class WorkStrand : public boost::noncopyable
{
public:

    //
    // State Accessors
    //

    Uint GetNumBlockedWorks() const;


private:
    boost::intrusive_ptr< WorkStrandImpl > m_impl;

};

ISHTAR_REFERENCE_COUNTED_DECLARE( WorkStrandImpl )


///////////////////////////////////////////////////////////////////////////////

} // namespace Task

} // namespace Ishtar

#endif // __ISHTAR_TASK_WORK_STRAND_H

